<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Overtrue\Pinyin\Pinyin; // 引入拼音库

class Student extends Model
{
    // 允许批量赋值的字段（包含 upper_initial）
    protected $fillable = ['student_code', 'name', 'gender', 'clazz_id', 'upper_initial', 'is_valid', 'first_word'];

    // 模型初始化时注册事件
    protected static function booted()
    {
        // 新增记录前生成首字母
        static::creating(function ($student) {
            $student->upper_initial = self::getChineseInitial($student->name);
        });

        // 更新记录时重新生成首字母（如果姓名被修改）
        static::updating(function ($student) {
            if ($student->isDirty('name')) { // 检查 name 字段是否被修改
                $student->upper_initial = self::getChineseInitial($student->name);
            }
        });
    }

    // 静态方法：获取中文姓名首字母（大写）
    protected static function getChineseInitial(string $name): string
    {
        $pinyin = new Pinyin(); // 初始化拼音库
        $firstChar = mb_substr($name, 0, 1, 'UTF-8'); // 取姓名第一个字符
        $pinyinInitial = $pinyin->abbr($firstChar); // 获取拼音首字母（如 "奉" → "f"）
        return strtoupper($pinyinInitial); // 转为大写（"F"）
    }

    protected static function getFirstCharacterPinyin(string $name): string
    {
        $pinyin = new Pinyin(); // 初始化拼音库
        $firstChar = mb_substr($name, 0, 1, 'UTF-8'); // 取姓名第一个字符
        
        $pinyinResult = Pinyin::convert($firstChar);
        
        // 处理结果（返回数组，取第一个元素）
        $fullPinyin = $pinyinResult[0] ?? '';
        
        return strtolower($fullPinyin);
    }
    
}